package com.ld.poetry.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;

/**
 * 标签实体类
 * 
 * 功能说明：
 * 1. 用于存储和管理文章标签信息
 * 2. 与分类（Sort）关联，每个标签必须属于一个分类
 * 3. 支持标签的增删改查操作
 * 
 * 数据库表：label
 * 
 * 使用场景：
 * 1. 文章标签管理
 * 2. 文章分类和标签关联
 * 3. 标签统计和展示
 * 
 * 注意事项：
 * 1. 标签必须关联到具体的分类
 * 2. 标签名称不能重复
 * 3. 删除标签时需要考虑关联的文章
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("label")
public class Label implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 标签ID
     * 
     * 功能说明：
     * 1. 标签的唯一标识符
     * 2. 主键，自增
     * 
     * 数据库字段：id
     * 字段类型：Integer
     * 是否必填：是
     * 是否唯一：是
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 所属分类ID
     * 
     * 功能说明：
     * 1. 关联到分类表（sort）的外键
     * 2. 标识标签所属的分类
     * 
     * 数据库字段：sort_id
     * 字段类型：Integer
     * 是否必填：是
     * 是否外键：是
     * 
     * 关联关系：
     * - 多对一关系：多个标签可以属于同一个分类
     * - 必须关联到已存在的分类
     */
    @TableField("sort_id")
    private Integer sortId;

    /**
     * 标签名称
     * 
     * 功能说明：
     * 1. 标签的显示名称
     * 2. 用于前端展示和搜索
     * 
     * 数据库字段：label_name
     * 字段类型：String
     * 是否必填：是
     * 是否唯一：是
     * 
     * 约束条件：
     * - 不能为空
     * - 不能重复
     * - 建议长度限制
     */
    @TableField("label_name")
    private String labelName;

    /**
     * 标签描述
     * 
     * 功能说明：
     * 1. 标签的详细说明
     * 2. 用于补充说明标签的用途和含义
     * 
     * 数据库字段：label_description
     * 字段类型：String
     * 是否必填：是
     * 
     * 约束条件：
     * - 不能为空
     * - 建议长度限制
     */
    @TableField("label_description")
    private String labelDescription;

    /**
     * 标签使用次数
     * 
     * 功能说明：
     * 1. 统计标签被文章使用的次数
     * 2. 用于展示标签的热度
     * 
     * 数据库字段：无（计算字段）
     * 字段类型：Integer
     * 是否必填：否
     * 
     * 注意事项：
     * 1. 该字段不在数据库表中存储
     * 2. 通过关联查询计算得出
     * 3. 用于前端展示和排序
     */
    @TableField(exist = false)
    private Integer countOfLabel;
}
